package com.pesking.core.sqlparser.parameter;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import com.pesking.core.Order;
import com.pesking.core.parameter.Parameter;
import com.pesking.core.util.StringUtils;

/**
 * SQL参数处理器接口
 * @author cypei
 * @since 4.0
 */
public abstract class SqlParameterProcessor implements Order {
	
	@Override
	public int getOrder() {
		return 0;
	}
	
	/**
	 * 处理参数
	 * @param sbSQL
	 * @param sqlParameter
	 * @param parameter
	 */
	public void handle(final StringBuilder sbSQL
						,final Parameter parameter
						,final List<SqlParameter> processors
						,final SqlParameter sqlParameter) {
		
	}
	
	/**
	 * 设置参数
	 * @param ps
	 * @param parameter
	 * @param index
	 */
	public void setParameter(final PreparedStatement ps,Parameter parameter,int index,SqlParameter sqlParameter) throws SQLException{
		
	}
	
	/**
	 * 把输入的值转化为SQL可以用的值,也就是替换一些关键字,以免注入
	 * @param str
	 * @return
	 */
	public String formatValue(String str){
		if (!StringUtils.isBlank(str)){
			str = StringUtils.replace(str, "'", "''");
		}
		return str;
	}

	/**
	 * 取得参数类型
	 * @return
	 */
	public abstract List<String> getSqlParameterType();
}
